Log In  
[back to top]

[ :: Read More :: ]

Hey everyone!

I've been messing around with picotron, and some people keep saying (including myself) that they hope for more buttons to work with or more input methods, but i've discovered something interesting that anyone can use! (until api changes)

I've made a keyboard tester that is fully commented out, and explains how it works and how get_key works and how to use it. to run the cart, click "show" below and copypaste code into picotron, then run it.

-- get_key_<state/pressed> usage example
-- made by antibrain

-- define list of all supported key names

keys={"1","2","3","4","5","6","7","8","9","0",
       "q","w","e","r","t","y","u","i","o","p",
       "a","s","d","f","g","h","j","k","l",
       "z","x","c","v","b","n","m",
       "[","]","shift","space","backspace"}

--define vars

currentkeyname=""
keystr=""
keyoffset=0
kpressed=true
ikd=false

-- get_key usage:

-- get_key_pressed(key) checks if key "key" is pressed and returns "true" for the frame that key "key" is pressed.
-- get_key_state(key) returns 1 if key "key" is held. if key "key" isnt held, returns "nil" 

-- "q", "1", "space", "backspace" are all valid key names.
-- "Q", "!", "^", "`" are not valid key names.

-- lowercase letters, numbers, and control keys (space, alt, backspace, etc) are all valid key names
-- uppercase letters, symbols, F keys and hotkeys are NOT valid key names.
-- if you want to use symbols (eg. shift+4=$), you can check if shift is held, then change output chars while it is.

-- an easy way to check for all keys is to make a table of all supported keynames, then iterate over it.

-- main update loop (30fps)

function _update()

    -- clear screen and reset drawing vars

    cls()
    kstrx=6
    kstry=20

    --for every key in keys, run key checking script

    for i=1,#keys do

        -- check if key "keys[i]" is held and set it to currentkey
        currentkey=get_key_state(keys[i])

        -- if current key isnt held, set it to 0 so future calculations dont die
        if currentkey==nil then currentkey=0 end    

        -- if current key is held, then set its name to currentkeyname for later
        if currentkey==1 then currentkeyname=keys[i] end

        -- if key string length in pixels is longer than screen length, move it back by 476 ish pixels
        if (kstrx-(keyoffset*5))+(#keystr*5)>480 then kstrx=6 kstry+=8 j=#keystr-keyoffset keyoffset=#keystr end
        if (#keystr<(keyoffset)) then keyoffset-=j end

        -- display all keys and change its color to red if key is held
        print(keys[i],6+(i*6),6,currentkey+7)

        -- draw line at next char in keystr to show where next char will go
        if sub(tostr(flr(time())/2),-1)=="5" then
        line(((#keystr+1)*5)-keyoffset*5,kstry+8,(((#keystr+1)*5)+4)-keyoffset*5,kstry+8,currentkey+7)
        end
        -- draw key string at kstrx,kstry in hyperlink blue
        print(keystr,kstrx-(keyoffset*5),kstry,28)

        -- if a key hasnt been pressed this frame
        if ikd==false then
            -- set ikd to true if one is
            ikd=get_key_pressed(keys[i])
        end

        -- if a key has been pressed this frame
        if ikd==true then

            -- set space to " " so that it doesnt just add the word "space" to keystr
            if currentkeyname=="space" then currentkeyname=" " end

            -- if backspace has been pressed, set keyname to "" so it doesnt print anything, then remove one char from end of keystr by setting keystr to substring of keystr from char 0 to char #keystr minus 1
            if currentkeyname=="backspace" then currentkeyname="" keystr=sub(keystr,0,#keystr-1) end
            keystr=keystr..currentkeyname

            --reset key vars
            currentkeyname=""
            ikd=false
        end
    end
end

I'll explain some things about get_key here.

There are two forms of get_key. get_key_pressed and get_key_state. they are very different and are usefull in their own ways.

get_key_pressed(key) returns true or false, depending on if key key is pressed. it returns true for one frame when key key is pressed.

get_key_state(key) returns nil or 1, depending on if key key is HELD. holding the key will make it return 1, and if key is not held, it returns NIL.

as for what to put in key, there are rules on what a valid keyname is.

"a","space" and "ctrl" are all valid keynames.
"A","`" and "!" are NOT valid keynames.

Valid keynames include: lowercase letters; numbers; control keys (space,ctrl,backspace,shift,etc)
INVALID keynames include: uppercase letters; symbols; upper key chars; anything you have to press shift for; F keys; programmable hotkeys.

Interestingly enough, "[" and "]" are also valid keynames, even though no other symbols seem to work.

If you want to use uppercase letters/symbols, you actually arent out of luck! you can write a script to check if shift is held using get_key_state, then change what keys do what.

I hope this guide/tutorial/cart was useful to you all! just remember that the API still might change before 0.1, so dont expect this to work later down the line. ill try to update this if it stops working, but dont count on it.

P#135719 2023-10-10 20:59 ( Edited 2023-10-11 20:30)

[ :: Read More :: ]

I'm almost done with the game!

...that felt really weird to say...

Anyways, the game is almost done, so this will be my last devlog! I'll also keep this one exclusive to the bbs, so I'll make this one count!

Here is everything that I CAN tell you:

Scanning now is how I want it.
Redzones aren't the only thing to worry about...
You'll have at least one ally during the game.
You can't run forever, and wont have to in the end.
Your guiding light costs 2.99 at best buy

Look forward to the release!

P#135469 2023-10-05 18:14

[ :: Read More :: ]

If you post anything and go to the "posts" tab in your profile, it always shows at least one comment! (on PC)

I think this is because the number of "comments' shown, really is the number of posts in the thread, and the "thread" starts at your posts "title", and everything below it is a "comment", or a post in the thread.

An easy fix for this, @zep, is instead of displaying the length/how many posts there are in the thread, just change it to be posts_in_thread-1, or whatever your var names are. If it doesn't just work like that, then you can make a new var called something like "num_of_comments_in_thread" and set it to the number of posts in thread minus one, and display that instead of posts in thread.

P#135421 2023-10-04 22:55

[ :: Read More :: ]

Ever noticed that when you load an old cart, sometimes it won't load because of API changes? You can see this for yourself if you try loading the popular cart "rougeris". After rougeris's release, 'do' was changed to not work with 'if' and vice versa. On desktop, fixing this is as easy as replacing 'do' with 'then', but on mobile or bbs, not as easy.

Now for the meat of this argument:

Why not make it so that old carts use an older version if pico-8? This doesn't need to be updated for every old cart, but maybe, when you submit a bbs cart from when/if this is changed to an API freeze, the bbs logs what version your cart uses, and when loaded, grabs a specific version of p8, loads it, then runs the cart in it, that would eliminate the possibility of future obsolete carts!

There's really no excuse not to do it, or not to even consider it. Every version of p8 (minus the mysterious "rc") is available to p8 owners on the download page under older versions.

P#135420 2023-10-04 22:46 ( Edited 2023-10-04 22:47)

[ :: Read More :: ]

Wait:

FUNCTION WAIT(FRAMES)
 FOR I=1,FRAMES DO
  FLIP()
 END
END

Usage:

Wait(30) pauses cart for 30 frames.

Grab pixel color

FUNCTION GET_PIXEL(X,Y)
 RETURN PGET(X,Y)
END

Usage:

X=GET_PIXEL(50,40) Gets the color of the pixel at 50,40 and assigns it to X

Get map tile

 FUNCTION GET_MTILE(X,Y)
  RETURN MGET(X/8,Y/8)
 END

Returns map tile at x,y

Mini fget mget

 FUNCTION GETMFLAG(X,Y)
  RETURN FGET(MGET(X/8,Y/8))
 END

Returns flag of map tile at x,y

P#135412 2023-10-04 18:17

[ :: Read More :: ]

Bit of a shorter one, but I'm half way done with the game! I have around 12 more levels to make, and I'm planning on adding another puzzle mechanic and maybe NPC's.

For now though, I've finally finished the chase mechanics, so I can show those soon. I've also decided calling it "lidar game" is dumb , so for the time being, I am calling it "lights out". Please contact me if you have a better name for it.

I'll have some videos soonish, so look out for that!

P#135359 2023-10-03 18:34

[ :: Read More :: ]

I've found some interesting things tucked away in picotron's code, and I'd like to share them!

First off, you can edit and view any file by typing edit name.ext, where name is the file and ext is the extension.

There are loads of gui features to mess with and ruin, and my favorite is notify_user(<text>). When called, it displays "text" in a little notification bar! Even works with vars! Another honorable mention is the gui text editor. It's buggy sometimes, but you can embed a text editor or code editor anywhere you want in your cart!

As for non-gui things, there are many. You can read keyboard presses (get_key_pressed(key)), actively playing sounds, running processes, open files, OPEN files, delete files, change and list directories, all from within your carts! I'm sure there's a way to make a program run in the background, so this could make for custom themes, keyboard remapping, BG music and sound effects, freaking integration with your, YOUR operating system, the list goes on.

Also, in the code for load.lua, you can see that if it finds certain files, it will launch certain editors. This includes .sfx for sounds, .gfx for sprites, .map for... the map, .Lua for code and .pod for who knows what.

Speaking of pods, I feel like I'm the only one exited for them! So much can go in a pod! Images, sprites, sound maybe, open workstations, save data, my net worth, im very exited for wacky old picotron object data

Another really really REALLY cool thing is this: try CDing into /system/util. Notice anything? Well I did! All those files are the terminal commands! They are also .lua's... (you know where this is going) try this: type "code echo.lua" while your in the util folder to make a new file. At line 1 type print(env().argv[1]) and save it. You should now have "echo.lua" in the util folder. Now type "startup" into the terminal to restart picotron. Now- get ready, type "echo hello!" Into the terminal. That's right. You just wrote your own terminal command! How freaking cool is that!? Incase you wanted to know, how this works is on boot, picotron loads everything in /util/ to be used as a terminal command. env() means "enviornment" and argv[1] means "Argument 1". enviornment is a function that manages ptron's enviornment, and argv is a table that contains any arguments you write in a terminal command! (if you write "load j.p64", j.p64 is the argument).

Last thing, the pinboard. You can actually re-enable it with some work! Just un-comment some code and add some code back, add some of your own, and bam! Because of the way picotron was made, and how easy it is to edit, I'm sure it's not too hard to write a library to put things up there.

P#135070 2023-09-28 22:45 ( Edited 2023-09-29 23:10)

[ :: Read More :: ]

The Pixel Toy (TpxT)

2nd picotron game ever made!?

To play, copy and paste code below (click "show") into picotron playground (or actual picotron when it comes out!)

If it says "clipboard can not be read", then don't use base Firefox. if you aren't using base Firefox, then give picotron clipboard permissions in site settings.

vvv Code vvv

--  ThePixelToy
--  by antibrain

--[[

todo:
maybe some sort of GOL type
sounds/graphics/prebuilt maps when ptron 0.1 comes out
scene loader from clipboard to make something like TPT's save browser
more pixel types
more reactions
make neut/prot act like they do in TPT instead of acting like GAS/FIRE
saving/loading saves to hard disc. maybe using printh as file? cartdata?
chemestry?
air pressure
heat
simulate each pixel individualy so we can track its heat, speed, mass, weight, etc.
virus because virus in TPT is very satisfying
make fill/line tool not terrible
deco layers
ability to change sim speed
full keyboard support?

]]--
j=0
dc=5
size=0
sim=1

function _update() --update loop
    mx,my,mb=get_mouse() --get mouse data
    simulatepixels() --simulate pixels
   controls() --allow game to be controlled
end

function _draw() --draw loop
 mousedraw() --draw with mouse
 ui() --draw ui
end

function simulatepixels()
if sim==1 then
for i=1,4000 do --4000 times per frame (30fps?)

        local x=rnd(480) --get random x and
        local y=rnd(270) --y values and
        local c=pget(x,y) --get the color of that pixel.
        if c==8 then --is red

            if pget(x,y+1)!=5 and pget(x,y+1)!=7 then --check all bordering pixels and if any of them arent a wall
                pset(x,y+1,c) --then set it to red
            end
            if pget(x,y-1)!=5 and pget(x,y-1)!=7 then --repeat for all other bordering pixels
                pset(x,y-1,c)
            end
            if pget(x+1,y)!=5 and pget(x+1,y)!=7 then
                pset(x+1,y,c)
            end
            if pget(x-1,y)!=5 and pget(x-1,y)!=7 then
                pset(x-1,y,c)
            end     
        end 

        if c==15 then --sand
         if pget(x,y+1)==0 then --sand

            pset(x,y+1,c) --f a l l
            pset(x,y,0) 
         end
         if pget(x,y+1)==12 then 
            pset(x,y+1,c)
            pset(x,y,12)
         end
         if pget(x,y+1)==1 then
            pset(x,y+1,c)
            pset(x,y,1)
         end
        end

        if c==2 or c==10 or c==11 then --gas (fire?)/neut/prot (i couldnt get neut/prot to act normal so i gave up :p )
                local j=flr(rnd(4)) --pick random number
                local q=flr(rnd(2))
                if q==1 and c==2 then --decay randoly
                    pset(x,y,0)
                end
                if q!=4 and j==0 and pget(x+1,y)==0 then --go in random direction
                    pset(x,y,0)
                    pset(x+1,y,c)
                end
                if q!=4 and j==1 and pget(x-1,y)==0 then    
                    pset(x,y,0)
                    pset(x-1,y,c)
                end
                if q!=4 and j==2 and pget(x,y+1)==0 then
                    pset(x,y,0)
                    pset(x,y+1,c)
                end
                if q!=4 and j==3 and pget(x,y-1)==0 then
                    pset(x,y,0)
                    pset(x,y-1,c)
                end
                if c==11 then
                    if pget(x+1,y)==1 and pget(x+1,y)==0 then
                     pset(x+1,y,11)
                    end
                    if pget(x-1,y)==1 and pget(x-1,y)==0 then
                     pset(x-1,y,11)
                    end
                    if pget(x,y+1)==1 and pget(x,y+1)==0 then
                     pset(x,y+1,11)
                    end
                    if pget(x,y-1)==1 and pget(x,y-1)==0 then
                     pset(x,y-1,11)
                    end

                end
                if c==2 and pget(x,y+1)==12 or pget(x,y-1)==12 or pget(x-1,y)==12 or pget(x+1,y)==12 then
                    pset(x,y,0)
                end
        end
        if c==12 or c==1 or c==9 then --warder/deut/lava physics

            if pget(x,y+1)==0 then --let it fall down
                pset(x,y,0)
                pset(x,y+1,c)
            elseif pget(x-1,y)==0 then --if there's an open space and it isnt in free-fall,
                pset(x-1,y,c) --allow it to drip left and
                pset(x,y,0)
            elseif pget(x+1,y)==0 then
                pset(x+1,y,c) --right as well
                pset(x,y,0)
            end
            if c==1 and pget(x,y+1)==11 or pget(x,y-1)==11 or pget(x-1,y)==11 or pget(x+1,y)==11 then
                pset(x,y,11)
            end
        end
        if c==16 then --remove fill border
            pset(x,y,0)
        end
        if c==3 or c==4 then --wood/plant/foliage
         if pget(x,y+1)==2 or pget(x,y+1)==9 then
          pset(x,y,2)
         end
         if pget(x,y-1)==2 or pget(x,y-1)==9 then
          pset(x,y,2)
         end
         if pget(x+1,y)==2 or pget(x+1,y)==9 then
          pset(x,y,2)
         end
         if pget(x-1,y)==2 or pget(x-1,y)==9 then
          pset(x,y,2)
         end
         if c==3 then
          if pget(x,y+1)==12 then
           pset(x,y+1,3)
          end
          if pget(x,y-1)==12 then
           pset(x,y-1,3)
          end
          if pget(x+1,y)==12 then
           pset(x+1,y,3)
          end
          if pget(x-1,y)==12 then
           pset(x-1,y,3)
          end
        end
        end
        if c==14 then
         if pget(x,y+1)==0 then
          pset(x,y,0)
          pset(x,y+1,14)
         end
         if pget(x,y+1)>0 and pget(x,y+1)!=5 and pget(x,y+1)!=14 and pget(x,y+1)!=29 then
          circfill(x-4,y-4,16,2)
         end
        end
        if c==6 then
            if pget(x,y+1)==10 or pget(x,y+1)==9 then
                pset(x,y,9)
            end
            if pget(x,y-1)==10 or pget(x,y-1)==9 then
                pset(x,y,9)
            end
            if pget(x+1,y)==10 or pget(x+1,y)==9 then
                pset(x,y,9)
            end
            if pget(x-1,y)==10 or pget(x-1,y)==9 then
                pset(x,y,9)
            end

        end
        if c==7 then
            if pget(x,y+1)==0 then
                pset(x,y,0)
                pset(x,y+1,7)
            end
            if pget(x,y+1)==12 then
                pset(x,y+1,7)
            end
            if pget(x,y-1)==12 then
                pset(x,y-1,7)
            end
            if pget(x+1,y)==12 then
                pset(x+1,y,7)
            end
            if pget(x-1,y)==12 then
                pset(x-1,y,7)
            end

            if pget(x,y+1)==2 or pget(x,y+1)==9 then
                pset(x,y,12)
            end
            if pget(x,y-1)==2 or pget(x,y-1)==9 then
                pset(x,y,12)
            end
            if pget(x+1,y)==2 or pget(x+1,y)==9 then
                pset(x,y,12)
            end
            if pget(x-1,y)==2 or pget(x-1,y)==9 then
                pset(x,y,12)
            end
        end
        if c==9 then
            local q
            if pget(x+1,y)==6 and q==0 then
                pset(x+1,y,c)
            end
            if pget(x-1,y)==6 and q==0 then
                pset(x-1,y,c)
            end
            if pget(x,y+1)==6 and q==0 then
                pset(x,y+1,c)
            end
            if pget(x,y-1)==6 and q==0 then
                pset(x,y-1,c)
            end

            if pget(x+1,y)==12 or pget(x-1,y)==12 or pget(x,y+1)==12 or pget(x,y-1)==12 then
                pset(x,y,6)
                q=1
            else
             q=0
            end

        end
    end
end
end

function mousedraw()

if mb==1 and not(btn(5)) then --if left click then
  circfill(mx,my,size,dc) --draw red/wall at mouse pos
 elseif mb==2 then --if right click (or ctrl click)
  circfill(mx,my,size,0) --erase (draw black at mouse pos)
 end
if btn(5) then --check if x is pressed
    if mb==1 and j==0 then --only do this once per fill!
        ox=mx --set old mx to mc
        oy=my --same for old my
        j=1 --j
    end
    if mb==1 then-- if mousedown
     omb=1 --set old mouse click to 1
     rect(ox,oy,mx,my,16) --fill outline
    elseif omb==1 then --if its one then
     rectfill(ox,oy,mx,my,dc) --fill
     omb=0 --set old mouse button to 0 (because mouse was released)
     ox=nil --nil ox and oy
     oy=nil
     j=0 --j
    end
else
    ox=nil --if x isnt pressed, nil x and y, then j
    oy=nil
    j=0 
end

end

function ui() --ui bar
 rectfill(0,0,480,8,29) --bar
 circfill(4,4,2,dc) --current color
 rect(0,0,8,8,5) --outline on current color
 print("size:"..flr(size),50,1,0)--brush size
 print(scolor,12,1,0)
 print("Cpu: "..flr(stat(1)*10),100,1,0) 
 if sim==1 then
    print("running",445,1,0)
 else
   print("paused!",445,1,0)
 end 
 if dc==0 then scolor="erase"end
 if dc==1 then scolor="deut"end
 if dc==2 then scolor="fire"end
 if dc==3 then scolor="plant"end
 if dc==4 then scolor="wood"end
 if dc==5 then scolor="wall"end
 if dc==6 then scolor="stone"end
 if dc==7 then scolor="snow"end
 if dc==8 then scolor="eater"end
 if dc==9 then scolor="lava"end
 if dc==10 then scolor="proton"end
 if dc==11 then scolor="neutron"end
 if dc==12 then scolor="water"end
 if dc==13 then scolor="paint"end
 if dc==14 then scolor="bomb"end
 if dc==15 then scolor="sand"end
end

function controls() --controls
        if btn(1) then dc+=0.1 end --change brush color
        if btn(0) then dc-=0.1 end
        if dc<0 then dc=0 end --dont let color be too much or little or else
        if dc>15 then dc=15 end --the screen dies :(
        if btn(2) then size+=0.1 end --change brush size
        if btn(3) then size-=0.1 end
       if size<0 then size=0 end--dont let it go negative
        if btn(4)==true then sim=0 else sim=1 end --pause when z is held
        if btn(1)==false and btn(0)==false then dc=flr(dc) end
end

As you can tell, this is based off of The Powder Toy (which you should play!) this is not intended to be a recreation of TPT, more like a demake.

TPT download: https://powdertoy.co.uk/

PicoTron playground: https://www.lexaloffle.com/picotron.php?page=playground

PicoTron main page: (Buy it. gun.png) https://www.picotron.net/

First picotron game ever made: https://www.lexaloffle.com/bbs/?tid=52328

Controls (This game)

Left click - Draw with selected pixel.
Right click - Erase (draw black).

Up/Down - Change brush size.
Left/Right - Change pixel type.
X (hold) - Rectangular fill (Hold x and press and drag Lclick, then release when ready to fill).
Z (hold) - Pauses simulation while held.

Basic reactions (and images!):

Plant and wood burn.

Neutrons eat Deuterium.
Plant eats water.
Water can freeze.

Lava and fire and protons are hot.
Bomb is bomb.

Stone melts when hot.

paint does nothing (just for drawing)

Water and lava dont mix!

And more?

Comment if you'd like to see any additions! ill add them if they are reasonable/are possible.

Thanks for checking this out! i hope you have fun with it.

P#134696 2023-09-21 03:30 ( Edited 2023-09-22 20:16)

[ :: Read More :: ]

1K Demo Collection By @AntiBrain (Me)

This is a collection of 5 democarts that are all under 1KB in total. you can find specific sizes and downloads at the links below or play them at the bottom of this post.

I recommend downloading the executables at my itch page below, because some of them can slow down the web player.

!!EPILEPSY WARNING!!

Many of these carts, especially GradGen and Barf, contain quickly flashing lights and colors. in barfs case, to make as much noise as possible, and in GradGen's case, to create a scrolling effect. if that sounds like it could hurt you, stay away from GradGen and Barf, and show discretion playing any carts here or in any other blog posts. your health always comes first.

Jam:
https://itch.io/jam/pico-1k-2023

Demo Collection Submission Page:
https://itch.io/jam/pico-1k-2023/rate/2262904

Itch.io page w/ downloads:
https://antibrain.itch.io/democollection1k

Individual carts:

GradGen:

Cart #grad1k-0 | 2023-09-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

DVD:

Cart #dvd1k-0 | 2023-09-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

Circ:

Cart #circ1k-1 | 2023-09-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

Barf:

Cart #barf1k-0 | 2023-09-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

Amoeba:

Cart #amoeba1k-0 | 2023-09-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

Sizes in compressed bytes are listed on the itch.io page and on the jam submission page. downloads for executables and source code are available on the itch.io page (the antibrain one, not the jam ones)

P#134372 2023-09-15 01:16 ( Edited 2023-09-18 23:37)

[ :: Read More :: ]

Cart #wdm1k-0 | 2023-09-09 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

Cart for PICO-8 1K Jam!

Itch.io link:

https://antibrain.itch.io/wdm1k

P#134103 2023-09-09 18:07

[ :: Read More :: ]

Lidar devlog/update #2

Sorry i was gone for so long, but im back now!

Here is another update for my lidar game!

In my last post i promised some puzzle mechanics, so ill reveal them one by one. the first mechanic is in some levels you can find a green tile, that when stepped on it removes red spaces from the map! this can make for some interesting level design where you have to find a switch to progress into a previously blocked-off area. click the link below to see a video showcasing this feature. (also im using twitter for videos because i cant put a .mp4 in a bbs post)

https://twitter.com/ulysseus4/status/1698053634674819443

P#133871 2023-09-02 19:12

[ :: Read More :: ]

I thought it was strange to restrict update posts to twitter, so here it is!

This is a project ive been working on for a few months and so far its about 1/4th the way done! now what is it though?

This is a game based of Scanner Sombre, a game/trend that was popular for about 2 weeks. Normal scanner sombre is a 1st person horror game where you cannot see and must use a Lidar scanner to sort of "Paint" dots on surfaces to see. after i watched Fundy make his version, i thought to myself: "huh. why cant i do that too?"

Then i decided to make a scanner sombre type game in pico-8! Obviously i do not have the brain power to make a 3D game in pico-8, so i decided to do something more... Creative. I opted to make it a top-down maze game with some puzzle elements and obstacles. The only catch, is that you Cant see the maze. obviously. Puzzle elements i will show later, Ill show the chase sequence after that, and then ill update you all if i add any other big features. for now, here is what i CAN tell you.

The game takes place in a maze where you cannot see anything but pixels you've mapped out, and the player, as well as the HUD. The player is a yellow single pixel and it leaves a trail which deleats quickly. The player trail also removes mapped tiles, so be careful where you step! your main ways of seeing are with X and Z. Pressing X will scan a short area around the player at a slower rate, and pressing Z will shoot a large burst of lines (lazers) that can scan further, but you only have a limited charge and once your charge is used up, it takes a long time to recharge, forcing the player to press on with lower visibility, causing them to make mistakes more often, making the game more challenging. this psudo-horror aspect only really comes into effect during the chase sequence.

Here is a short video showing the first level and some basic mechanics:

https://twitter.com/ulysseus4/status/1689919281310613504

P#133420 2023-08-23 04:31

[ :: Read More :: ]

I was looking at the Pico-8 changelog and saw that themes were made easier to change. this got me thinking, how hard would it be to make a custom theme, or even accompanying thememaker.exe program? this seemed really cool to me, so i threw myself headfirst into pico-8's files. here are my findings/questions i have.

Firstly, in "pico8.dat" i found that it not only contains data code which i have no idea what it contains, but it also contains a lot of pico-8 code! after a bit of digging, i found that in this order, this pico-8 code is:

1: the pico-8 boot sfx
2:pico-8 democarts
3: i have no clue

I also found around 5 copies of the same lines of terminal syntax (eg 'ls' 'folder' 'load' etc.), which is interesting. i was mainly looking for the color codes that tell pico-8 what colors certain UI elements are, but i could not find them. they had to be in the mess of .dat stuff.

After awhile, i found that pico8.dat is byte-checked, meaning that pico-8 wont boot if pico8.dat has been altered at all. makes sense, it would significantly impact monetary gain if everyone could just write their own pico-8.

after not knowing what to do next, i decided to open pico-8.exe in vscode. i found a lot of terminal command syntax, and licenses for open-source libraries. perfectly normal. i still could not find byte-checks or color codes for UI.

I decided that my next step/idea was to figure out what kind of .dat file pico8.dat was. i saw that it mentions a "POD" file, so thats what i went off of. i could not find anything. i then booted pico-8 and looked in the log.txt. i then saw something interesting. pico-8 seems to be using "CODO" to load files. this "CODO" returned no relevant results online, so i decided just to watch it do its thing. it seems to simply load pico-8, config.txt, the controller thing and also pico8.dat. the most interesting part is that this "CODO" refers to pico8.dat as a "POD" file, which i also cant find anywhere.

If anyone has any ideas of what a "CODO pod file" is, then let me know. if this is scary to you @zep and you dont want pico8 to be decompiled by some sleep-deprived idiot (myself) then ill gladly stop. if not, then custom themes is my next project of anyone wants to help!

P#133373 2023-08-22 03:39

[ :: Read More :: ]

Anyone know why the site was down for the past 7ish hours? maintenance? did we get hacked?

EDIT: DOWN AGAIN but it seems were back?

Ive also noticed its impossible to create posts/comments. strange. at least edits work?

@zep do you know whats going on? are we getting ddosed?

it also seems that times are incorrect. i am editing this at 10:09 GMT-7 , and the edit date is wrong.

edit 2: seems posts are back? someone posted abt their movement system, so i guess posts are back. comments still dont work. very odd.

edit 3: i guess posts are gone again. maybe its a me issue. someone try posting.

also ive noticed that if you try to post and cant, changing "pid=" in the search bar to "pid= any number" will, if there is a corresponding post, let you view that post as if you were editing posts. even drafts.

edit 4: ive still been getting update notifications from the automated lexaloffle thing, but the links are wrong. maybe an api is down or something broke somewhere.

edit 5: another short outage? hmm. im beginning to see a pattern.

edit 6: i dont know if this is new, but there is now a "#m" at the end of every lexaloffle url. huh.

edit 7: i guess now its just for some pages.

test

edit 8: seems like some people can still post/comment. i dont know why. maybe @zep does. i dont know if its daytime in japan (or wherever zep/the website developer is) right now, or if they are even awake, but my guess is it'll hopefully be fixed tomorrow. i have to go to sleep because its midnight where i am. gn everyone. lets hope its not serious and its simply server shenanigans and not a targeted attack.

P#133210 2023-08-18 00:12 ( Edited 2023-08-18 07:01)

[ :: Read More :: ]

Cart #mangle-0 | 2023-08-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

Mangle08 (!!!SEIZURE WARNING!!!)

What this cart does is poke as many values as possible to mangle pico-8 into an almost unusable state. it will mess with colors, drawing, the map(?), and sounds.

This cart is best experienced when downloaded and ran on desktop pico-8, or at https://www.pico-8-edu.com/ . just type "load #mangle" to load it. after running it for a bit try messing around with the sprite editor, sounds, map, or anything else.

P#133179 2023-08-17 02:05 ( Edited 2023-08-17 02:06)

[ :: Read More :: ]

Cart #grow-1 | 2023-08-11 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
7

GROW

Simple Democart i made.

I came across this idea when working on my other game (info on my twitter :) ), and decided to horribly code unglue it from that game and edit it into a little pico-8 democart! I tried to keep it similar to p8's builtin demos, but i couldn't help myself from adding little sounds and stuff. (Also if you want it @zep , its yours :) ) feel free to yoink code from this cart if you feel like it! i commented out everything that needs it so that even beginners can make sense of whats going on under the floorboards. er- what makes the-- never mind. i also left some map spaces open if you want to make your own levels!

Thank you all from the pico-8 community for not yelling about my awful code! i really appreciate all the support from my other projects and im glad im apart of this little community.

Thank you so much for checking this out! have fun!

P#132959 2023-08-11 07:26

[ :: Read More :: ]

Cart #rndcart-0 | 2024-01-31 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
7

Random Cart loader

This cartridge loads a random numerical id cartridge of bbs. basically any cart on bbs thats cart id is a number.

Update 2.0 : Compress code + fix display bug

P#130435 2023-06-01 23:16 ( Edited 2024-01-31 21:38)

[ :: Read More :: ]

Cart #picotemplate-0 | 2023-05-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

PICOTEMPLATE

Nothing special, nothing crazy. just a simple template cart for making games.

How to use:

click the little cartridge icon in the corner of the cart and right click the image to download. then just load it and start making your own cart! don't forget to save it as a new filename after you make something so that it doesn't save to the template cart.

P#130185 2023-05-26 17:28 ( Edited 2023-06-01 14:57)

[ :: Read More :: ]

Cart #kaizoleste-1 | 2023-05-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
10

KAIZOLESTE: A NEW MOUNTAIN

A new mountain has been discovered where the impossible becomes possible and chaos becomes order and order becomes chaos. Random peaks, Deep caves, and penguins galore, Madeline faces her hardest challenge yet in Kaizoleste.

IMPORTANT:

This mod has SAAAAAVE DAAATAAA!!!! all of your progress is saved no matter where you play, even online! all your data is saved including: your current level; your total time played; your death count and; your berry count! if you click "delete save" in the pause menu, all of your savedata is gone. if you accidently click it, no worries! just beat your current level and you wont lose any progress.

Also credits to evercore team for evercore, because i used it as a base for this mod.

notes:

This mod REQUIRES spike clips and spike jumps to beat. jemskip is NOT possible to my knowledge, and all levels and berries are possible, but some require harder tricks. helpful arrow signs indicate how to perform certain tricks, but they go away later on. For more info on speedrunning tricks and tech, goto https://celesteclassic.github.io/glossary/ !

This was my absolute favorite thing in general to make. the journey of creating this mod took about 1 year and every minute was worth it. thank you so much for playing and cheering me on and i hope you enjoy this mod as much as i enjoyed making it

Heres my best time:

Congrats to @Catastrophic Cal for beating my time!

P#130088 2023-05-24 00:58 ( Edited 2023-10-16 00:11)

[ :: Read More :: ]

Cart #picobrowser-16 | 2023-11-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
9

READ THIS FIRST

Click the cartridge icon at the bottom of the cart and right click on the image to save it, then just plop it in your /carts/ folder. To use it in desktop pico-8, just put it in your carts folder. For use in pico-8-edu, go to immediate mode (the terminal) and type load #picobrowser, then type save [NAME].p8 where name is whatever you want. then, in pico-8 or edu, just type load name.p8, again where [name] is what you named the file.

more info:

This cart was made using @dw817 's "free roaming directory" cart. Their version, however could only see in /carts/ and couldn't load anything.

Features:

. Displays a real visualization of all your files in your carts folder.
. Lets you go in and out of folders in /carts/
. Lets you load .p8 and .p8.png files.
. Lets you load BBS carts ( more on that below :) )
. Lets you return to the browser within loaded cart using a breadcrumb system
. Can load any .p8 or .p8.png file you throw at it (if you don't mess with the file extension)
. Has the best sound effects in the entire world (big claim, I know)
. Scroll bar so you don't get lost
. Only has 1 unfixable bug! ( integer limit :p )

Changelog:

v3.0


Fixed : Runtime error and crash when no files are found
Fixed : Able to open empty space
Fixed : No files found message not appearing when no files are found
Added : This changelog
Changed : Some sprites
Changed : Made it so going back a dir goes back one directory instead of going to /carts/

v3.1

Fixed : Runtime error when loaded off bbs and/or no files are found in root dir

v3.2

Fixed : Runtime error when loaded off bbs and/or no files are found in root dir

v3.3

Changed : Error text now makes more sense and tells user what to do if no files are found.

v3.31

Fixed : Actually closed error if/then statement. how did i miss that
Changed : Put changelogs in spoiler buttons to avoid clutter

v3.32

Fixed : Actually finally fixed error message (howintheworlddidiforgetasingleENDandSTOPwhatiswrongwithmeeeee)

v3.33

Added : Actually added the new sprites i said i added 6 changelogs ago (i am a mess)

v3.4

Added : Can now skip to 1st and Last file in current dir by pressing ⬅️ or ➡️.

v4.0

Added : Revamped controls using mouse. works just how you'd expect it to. Double click to open, scroll to scroll, ect.
Added : Mouse sprites
Changed : Some comments
Changed : Old btn inputs now skip files instead of scrolling.

v5.0

Added : Can load any bbs cart through input instead of file
Removed : Stupid .pbbs system
Changed : BTN() function

Todo:

Make scrollbar take up whole screen height and position in bar match position in current dir instead of having scrollbar be as long as current dir.
Fix scrollbar being able to go off screen
Fix lag
Make code readable

Tell me if you have any suggestions!

Important:

This cart can load BBS carts from your carts folder! Simply press 🅾️ and enter your cartridge's bbs ID, Without the hashtag/pound symbol (#).

the only bug I cant fix right now is integer limits. if you have more then 30k+ files then... well you need to figure something out man, and also the cart will break. if you have a really long folder path that's more then the string limit deep, then you wont be able to go any deeper. so basically: don't have too many files and don't have too many subdirectories.

Thanks to @dw817 for the original cart.

IMPORTANT 2: I just realized that a folder in the cart preview is named "joke". That does not mean this cart is a joke. I just needed to make folders for the cart label and just wrote the first 3 things that I thought of.

final notes:

I had a lot of fun making this! its the best that it could be as of posting this, and i really like how it came out. i did end up adding some useless features that really pull everything together and im proud of that. my vision with this cart is that maybe someday it will be the go-to way to browse files from within pico-8's os. no more annoying ls and cd commands and finally a nice p8 style UI. maybe one day it will be a built-in pico-8 feature. ( @zep :O ) in all, this was my favorite cart to make so far and i hope you all enjoy it as much as i enjoyed making it.

Final notes 2 (I am an idiot)

I didnt know splore had a file browser in it, so i guess this software is completely redundant on desktop pico-8, but it is still useful on devices that dont have splore! (like edu!)

Thanks for taking the time to read my documentary on my silly file browser!

ALSO, As of v4.0, with the addition of mouse control, maybe it is better? let me know if you think so!

P#129807 2023-05-16 15:32 ( Edited 2024-02-07 17:18)

View Older Posts